package com.yunpeng.dishes.common.enums;

import com.yunpeng.common.enums.ResultCodeEnumInterface;

/**
 * ResultCodeEnum
 *
 * @author : Moore(hemw)
 * @date : 2020-03-12
 */
public enum ResultCodeEnum implements ResultCodeEnumInterface {
    /**
     * 失败
     */
    FAIL("失败", 500),
    /**
     * 数据访问异常，请稍后重试！
     */
    DATA_ACCESS_FAIL("数据访问异常，请稍后重试！", 501),
    /**
     * 应用不存在此功能，请联系客服！
     */
    NO_SUCH_METHOD_FAIL("应用不存在此功能，请联系客服！", 502),
    /**
     * 非法访问异常
     */
    ILLEGAL_ACCESS("无权访问，请联系客服！", 503),
    /**
     * 不存在的目标
     */
    INVOCATION_TARGET("不存在的目标，请联系客服！", 504),
    /**
     * 未知请求
     */
    UNKNOWN_REQUEST("未知请求！", 505),
    /**
     * 过多的请求次数
     */
    MUCH_REQUEST_TIMES("过多的请求次数，请稍等一分钟重试！", 506),
    /**
     * 字段校验不通过
     */
    PARAMETER_CHECK_FAILED("字段校验不通过", 507),
    /**
     * 数据保存失败
     */
    SAVE_DATA_FAILED("数据保存失败", 508),
    /**
     * 数据不存在
     */
    NOT_EXISTS_DATA_FAILED("数据不存在", 509),
    /**
     * 成功
     */
    SUCCESS("成功", 200, true),

    /**
     * 未知状态
     */
    UNKNOWN("未知状态", 0);

    /**
     * 枚举值
     */
    private String label;

    /**
     * 枚举数值
     */
    private int value;

    /**
     * 是否成功状态
     */
    private Boolean isSuccess;

    ResultCodeEnum(String label, int value) {
        this.label = label;
        this.value = value;
        this.isSuccess = false;
    }

    ResultCodeEnum(String label, int value, Boolean isSuccess) {
        this.label = label;
        this.value = value;
        this.isSuccess = isSuccess;
    }

    @Override
    public String getLabel() {
        return label;
    }

    @Override
    public int getValue() {
        return value;
    }

    @Override
    public Boolean success() {
        return isSuccess;
    }
    /**
     * 根据传入的value获取对应枚举
     *
     * @param value
     * @return
     */
    public static ResultCodeEnum getEnumByValue(Integer value) {
        if (value != null) {
            for (ResultCodeEnum tmp : values()) {
                if (value == tmp.value) {
                    return tmp;
                }
            }
        }
        return UNKNOWN;
    }
}
